package com.zxy.ziems.server.alarm.service;


import com.zxy.btp.common.response.PageResult;
import com.zxy.ziems.common.pojo.MeasureDataBean;
import com.zxy.ziems.server.alarm.pojo.dto.AlarmProcessRecordDTO;
import com.zxy.ziems.server.alarm.pojo.dto.AlarmRecordEvent;
import com.zxy.ziems.server.alarm.pojo.entity.AlarmRecordEntity;
import com.zxy.ziems.server.alarm.pojo.param.AlarmRecordPageTypeParam;
import com.zxy.ziems.server.alarm.pojo.param.DeviceAlarmPageParam;
import com.zxy.ziems.server.alarm.pojo.vo.AlarmDealCountVO;
import com.zxy.ziems.server.alarm.pojo.vo.AlarmRecordDeviceVO;
import com.zxy.ziems.server.alarm.pojo.vo.AlarmRecordVO;
import com.zxy.ziems.server.vo.ChartVo;
import io.netty.buffer.ByteBuf;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * 告警记录
 *
 * @author chdzq
 * @create 2023/4/12
 */
public interface AlarmRecordService {

    /**
     * 告警记录
     *
     * @param event
     */
    void add(AlarmRecordEvent event);

    /**
     * 获取DO
     *
     * @param id
     * @return
     */
    AlarmRecordEntity getById(Serializable id);

    /**
     * 获取DO列表
     *
     * @param idList
     * @return
     */
    List<AlarmRecordEntity> listByIds(Collection<? extends Serializable> idList);

    /**
     * 处理处理告警记录
     *
     * @param dto
     * @return
     */
    void processAlarmRecord(AlarmProcessRecordDTO dto);

    /**
     * 分页查询
     *
     * @param param 分页查询参数
     * @return
     */
    PageResult<AlarmRecordVO> pageListBy(AlarmRecordPageTypeParam param);

    /**
     * 根据分页查询
     *
     * @param param 分页查询参数
     * @return
     */
    PageResult<AlarmRecordVO> pageByDevice(DeviceAlarmPageParam param);


    /**
     * 查询详情
     *
     * @param alarmId 告警Id
     * @return
     */
    AlarmRecordVO viewBy(String alarmId);

    /**
     * 安全报警处理统计
     *
     * @param startDate   开始时间
     * @param endDate     结束时间
     * @param modelTypeId 类型（气体，消防等）
     */
    List<AlarmDealCountVO> dealCount(String startDate, String endDate, String modelTypeId, String type);

    /**
     * 安全报警类型统计
     *
     * @param startDate
     * @param endDate
     * @param modelTypeId
     * @param queryType
     */
    ChartVo typeCount(String startDate, String endDate, String modelTypeId, String queryType);


    /**
     * 根据设备id查询相应告警信息
     *
     * @param deviceIdList
     * @return
     */
    List<AlarmRecordDeviceVO> listByDeviceIds(Collection<? extends Serializable> deviceIdList);

    /**
     * @param list
     */
    void storageAlarmDataList(List<MeasureDataBean> list);

    void storageAlarmByAlamRule(List<MeasureDataBean> gasAlarms);

    void pushAlarmMsgByAlamRule(AlarmRecordEntity alarmRecord);

    /**
     * 添加消防告警记录
     *
     * @param byteBuf
     */
    void addFireRecord(ByteBuf byteBuf) throws Exception;

    int removeByDeviceId(String deviceId);
}
